﻿using System; 
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Reflection;
using System.IO;
using System.Diagnostics;
using System.Data.OleDb;
using System.Globalization;

namespace template_dll
{

    public partial class ChildForm : Form
    {
        public ChildForm()
        {
            InitializeComponent();
        }

        private const string namechcol = "Флаг";
        //- для определения изменения/добавления акции
        public bool insUp = true;           
        private SqlConnection conn;
        //- таблица-источник для dataGridView
        public DataTable dt_marking = new DataTable();    
        //- таблица для данных корректировки
        private DataTable dt_mdrug;
        //- Параметры для передачи в sql базу
        public DateTime dateBegin;
        public DateTime dateStop;

        // - Дата для передачи на форму изменений
        public DateTime date1;
        public DateTime date2;

        //- Форматирование для DataGridView
        System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();

        private delegate void Deleg();
        public class cMain
        {
        public static Control Form1Control = null;
        private cMain() {}
        }
       
        public static bool DisplayForm(System.Windows.Forms.Form theMDIParent)
        {
            ChildForm f = new ChildForm();
            f.MdiParent = theMDIParent;
            f.WindowState = FormWindowState.Maximized;
            f.Show();
            return true;
        }

        private string GetServ(string filename)
        {
            string str = "";
            using (StreamReader streamReader = new StreamReader(filename))
            {
                while (!streamReader.EndOfStream)
                {
                    str += streamReader.ReadLine();
                }
            }
            return str;
        }

        private void ChildForm_Load(object sender, EventArgs e)
        {
            cMain.Form1Control = this;
            this.button6.Enabled = false;
            conn = new SqlConnection(@"Server=" + GetServ("serv.txt") + ";Database=ToolsDM;Integrated Security=True");
            dateBegin = DateTime.Now;
            dateStop = DateTime.Now;
            dt_marking.Columns.Add("Код товара");
            dt_marking.Columns.Add("Наименование товара");
            dt_marking.Columns.Add("Страна");
            dt_marking.Columns.Add("Производитель");
            dt_marking.Columns.Add("Группа заказа");
            dt_marking.Columns.Add("Спецгруппа");
            dt_marking.Columns.Add("Обязательный ассортимент");
            dt_marking.Columns.Add("Архивный");
            dt_marking.Columns.Add("Категория");
            dt_marking.Columns.Add("Отделение");
            dt_marking.Columns.Add("МНН");
            dt_marking.Columns.Add("Торговая технология");
            dt_marking.Columns.Add("Акция");
            dataGridView1.DataSource = dt_marking.DefaultView;
        }

        private SqlDataReader GetBrandTree(SqlConnection sqlcon)
        {
            SqlCommand com = sqlcon.CreateCommand();
            com.CommandType = CommandType.StoredProcedure;
            com.CommandText = @"pas_BrandTreeSel";
            return com.ExecuteReader();
        }

        private SqlDataReader RepProc(SqlConnection sqlcon)//метод для вызова хранимки
        {
            SqlCommand sqlcom = sqlcon.CreateCommand();
            sqlcom.CommandType = CommandType.StoredProcedure;
            sqlcom.CommandText = @"sp_name"; //имя хранимой процедуры
            sqlcom.CommandTimeout = 300;
            return sqlcom.ExecuteReader();
        }

        private void ExpToExcel(object sender, EventArgs e)
        {
            SaveFileDialog sfd = new SaveFileDialog();
            sfd.FileName = "csv-file";
            sfd.Filter = "Файл CSV | *.csv";
            if (sfd.ShowDialog() == DialogResult.OK)
            {
                ExpToExcel exp= new ExpToExcel();
                exp.SaveDGVToCSVfile(sfd.FileName.ToString(), dataGridView1, true);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //- Фильтр по таблеткам
            DrugsFilter.DrugsFilter df = new DrugsFilter.DrugsFilter();
            this.Text += " Загрузка товара";
            df.ShowDialog();
            this.Text = this.Text.Replace(" Загрузка товара", "");
            if (df.dt_drug_tmp.Rows.Count > 0)

            {
                dt_marking.Clear();
                df.dt_drug_tmp.Columns.Remove("Флаг");
                dt_marking = df.dt_drug_tmp.Copy();
                dataGridView1.DataSource = dt_marking.DefaultView;
                //- для разрешения значений NULL в таблице
                foreach (DataColumn col in dt_marking.Columns)
                {
                    col.AllowDBNull = true;
                }
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //- Загрузить списки каталогов из Excel файла, шаблон MarkingDrugs.xlt
            //- Файлы с расширением .xls и .xlsx
            
            ExpToExcel exp = new ExpToExcel();
            dt_marking.Clear();
            exp.ImportExcel(dt_marking);
            if (dt_marking.Rows.Count > 0)
            {
                //dataGridView1.Columns[13].DefaultCellStyle = dataGridViewCellStyle1;
                //dataGridView1.Columns[14].DefaultCellStyle = dataGridViewCellStyle1;
                dataGridView1.DataSource = dt_marking.DefaultView;
                this.button6.Enabled = true;
            }
            else
            {
                this.button6.Enabled = false;
                MessageBox.Show("Не выбран файл");
            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
            //- Выгрузка списка акционных товаров в Excel
            ExpToExcel exp = new ExpToExcel();
            exp.ExportToExcel(dataGridView1);
        }

        private void button3_Click(object sender, EventArgs e)
        {
            //- Добавить акцию товара
            this.button6.Enabled = true;
            insUp = true;
            Form2 form = new Form2();
            form.Show();
            form.button1.Text = "Добавить";
        }

        private void button5_Click(object sender, EventArgs e)
        {
            //- Корректировка акционного товара
            this.button6.Enabled = true;
            insUp = false;
            if (dataGridView1.Rows.Count == 0)
            {
                MessageBox.Show("Не выведен список товара");
                return;
            }
            string[] str = new string[dataGridView1.Columns.Count];
            int i = 0;
            dt_mdrug = new DataTable();
            foreach (DataGridViewColumn col in dataGridView1.Columns)
            {
                dt_mdrug.Columns.Add(col.Name);
            }
            DataRow dr = dt_mdrug.NewRow();
            for (i = 0; i < dataGridView1.Columns.Count; i++)
            {
                str[i] = dataGridView1.CurrentRow.Cells[i].Value.ToString();
                dr[i] = str[i];
            }
            dt_mdrug.Rows.Add(dr);
            Form2 form = new Form2();
            form.Show();
            form.comboBox1.Text = str[12];
            form.comboBox2.Text = str[0];
            form.comboBox3.Text = str[1];
            DateTime d1 = new DateTime();
            DateTime d2 = new DateTime();
            string[] arrDate = { "ddMMyyyy", "dd.MM.yyyy h:mm:ss", "dd.MM.yyyy HH:mm:ss", "dd.MM.yyyy hh:mm:ss", " dd/MM/yyyy ", "dd-MM-yyyy"};
            //if (String.IsNullOrEmpty(str[13]) == false  )
            //{
            //    d1 = DateTime.ParseExact(str[13], arrDate, null, DateTimeStyles.None);
            //    form.dateTimePicker1.Value = d1;
            //}
            //if (String.IsNullOrEmpty(str[14]) == false)
            //{
            //    d2 = DateTime.ParseExact(str[14], arrDate, null, DateTimeStyles.None);
            //    form.dateTimePicker2.Value = d2;
            //}
            form.button1.Text = "Изменить";
        }

        private void button7_Click(object sender, EventArgs e)
        {
            //- Очистить форму
            dt_marking.Clear();
//            dt_rep.Clear();
            dataGridView1.DataSource = dt_marking.DefaultView;
            this.button6.Enabled = false;
        }
        //- обновление DataGridView, параметры - таблица и номер выбранной строки
        public void refreshData()
        {
            //- Обновление DataGridView
            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
            if (dt_marking.Rows.Count > 0)
            {
                dataGridView1.DataSource = dt_marking.DefaultView;
            }
        }

        private void button6_Click(object sender, EventArgs e)
        {
            try
            {
                //- Добавить информацию в таблицу акций
                int rezult = 0;         //- результат запроса к базе
                //- Составная табличка для передачи параметра
                DataTable dt_tbl = new DataTable();
                //- таблица для занесения новой информации в базу данных
                DataTable dt_date = new DataTable();

                if (dataGridView1.Rows.Count == 0)
                {
                    MessageBox.Show("Не выведен список товара для загрузки в базу");
                    return;
                }
                else
                {
                    int okcancel = Convert.ToInt32(MessageBox.Show("Внести информацию в базу?", "Подтверждение", MessageBoxButtons.OKCancel));
                    if (okcancel == 2)
                    {
                        //- Выход из процедуры занесения в базу, пользователь нажал кнопку cancel
                        return;
                    }
                    dt_tbl.Columns.Add("Код товара");
                    dt_tbl.Columns.Add("Наименование товара");
                    dt_tbl.Columns.Add("Акция");
                    int i = 0;
                    for (i = 0; i < dataGridView1.Rows.Count; i++)
                    {
                        DataRow rr = dt_tbl.NewRow();
                        DataRow rd = dt_date.NewRow();
                        rr[0] = Convert.ToInt32(dataGridView1.Rows[i].Cells[0].Value);
                        rr[1] = dataGridView1.Rows[i].Cells[1].Value;
                        rr[2] = dataGridView1.Rows[i].Cells[12].Value;
                        dt_tbl.Rows.Add(rr);
                        dt_date.Rows.Add(rd);
                    }
                    //- Вызов процедуры заполнения таблицы с акцией товара
                    i = 0;
                    for (i = 0; i < dt_tbl.Rows.Count; i++)
                    {
                        SqlStorProc.sp_params[] par = new SqlStorProc.sp_params[4];
                        DataTable t = dt_tbl.Clone();
                        DataRow dr = t.NewRow();
                        dr[0] = dt_tbl.Rows[i][0];
                        dr[1] = dt_tbl.Rows[i][1];
                        dr[2] = dt_tbl.Rows[i][2];
                        t.Rows.Add(dr);
                        par[0].name = "@dateBegin";
                        par[0].value = dt_date.Rows[i][0];
                        par[1].name = "@dateStop";
                        par[1].value = dt_date.Rows[i][1];
                        par[2].name = "@tableDM";
                        par[2].value = t;
                        par[3].name = "@flag";
                        par[3].value = null;
                        rezult = (new SqlStorProc()).SqlProcExecNonQuery(conn, "pas_AddEventDrug", 300, par);
                    }
                    MessageBox.Show("Информация внесена в базу успешно");
                    this.button6.Enabled = false;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("ИНФОРМАЦИЯ В БАЗУ НЕ ВНЕСЕНА \n" + ex.Message.ToString() );
                this.button6.Enabled = false;
            }
        }

        private void button8_Click(object sender, EventArgs e)
        {
            //- Добавить новую акцию
            Form3 form = new Form3();
            form.ShowDialog();
        }
     }
}
